package br.ifpi.leds.educmanager.dao;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import br.ifpi.leds.educmanager.dao.hibernate.util.ObjetoDAO;
import br.ifpi.leds.educmanager.model.Professor;

//@ManagedBean(name="professorDAO")
//@RequestScoped
public class ProfessorDAO extends ObjetoDAO {

	/**
	 * Persiste um objeto Professor no banco de dados
	 * @param professor o professor a ser persistido
	 * @return o outcome utilizado no mapeamento JSF
	 */
	public void salvar(Professor professor) {
		iniciarSecao();
		getSecao().save(professor);
		getSecao().flush();
		encerrarSecao();
	}
	
	public void atualizar(Professor professor) {
		iniciarSecao();
		getSecao().update(professor);
		getSecao().flush();
		encerrarSecao();
	}
	
	/**
	 * Exclui um professor do banco de dados
	 * @param professor a ser exclu�do
	 */
	public void excluir(Professor professor) {
		iniciarSecao();
		getSecao().delete(professor);
		getSecao().flush();
		encerrarSecao();
	}

	/**
	 * Seleciona um professor pela sua matr�cula
	 * @param matricula matricula do professor que o identifica unicamente no banco de dados(PK)
	 * @return o professor selecionado caso exista
	 */
	public Professor recuperarPelaMatricula(Long matricula) {
		iniciarSecao();
		Professor professor = (Professor) getSecao().get(Professor.class, matricula);
		getSecao().flush();
		encerrarSecao();
		return professor;
	}

	
	/**
	 * Seleciona todos os professores cadastrados
	 * @return uma lista com os professores
	 */
	@SuppressWarnings("unchecked")
	public List<Professor> recuperarLista() {
		iniciarSecao();
		List<Professor> lista = getSecao().createCriteria(Professor.class).list();
		getSecao().flush();
		encerrarSecao();
		return lista;
	}

}
